/* Copyright (C) 2015-2016 HangZhou Zenzet Technology Co., Ltd.
 * All right reserved

 * File:crypto/locketdef.h
 * Author:guojianchuan/max
 * Date:2016-06-02
 
 */

#ifndef _LOCKET_DEF_H_
#define _LOCKET_DEF_H_

#ifdef __cplusplus
extern "C" {
#endif

#define IN
#define OUT
#define INOUT

#define FILE_ID_LEN                 64
#define FILE_IV_LEN                 64
#define FILE_KEY_LEN                64
#define FILE_OWNER_LEN              64
#define FILE_ALGORITHM_LEN          16
#define FILE_ALGORITHM_MODE_LEN     16
#define FILE_ALGORITHM_PADDING_LEN  16


/* Declare : Macro/Struct/Enum/Union */
/**
* @Enum: CIPHER_ENCODE_E
* @Author: guojianchuan/max
* @Date: 2016-06-29
* @Description: 数据编码格式
*/
typedef enum tagEncoding
{
    ENCODE_HEX           = 0,
    ENCODE_BASE64        = 1,
    ENCODE_BINARY        = 2
}CIPHER_ENCODE_E;

/**
* @Enum: CB_COMMAND_E
* @Author: guojianchuan/max
* @Date: 2016-07-18
* @Description: 回调函数返回消息枚举值
*/
typedef enum tagCallBackCmd
{
    /* 加解密后的数据 , 对应消息内容 CB_PARAM_S */
    MSG_CRYPT_DATA = 0, 
    
    /* 加解密完成 , 对应消息内容 CB_PARAM_S */
    MSG_CRYPT_FINISH, 

    /* 加解密进度 */
    MSG_CRYPT_PROCESS
}CB_COMMAND_E;

/* 回调函数函数指针 */
typedef int (*CRYPT_CALLBACK)(int iMsg, void* pParam);

/**
* @Struct: CB_PARAM_S
* @Author: guojianchuan/max
* @Date: 2016-07-18
* @Description: 回调函数返回的参数
*/
typedef struct tagCallBackParam
{
    /* 返回的数据 */
    char* pcData;

    /* 长度 */
    int iParamLen;
}CB_PARAM_S;

/**
* @Struct: CIPHER_S
* @Author: guojianchuan/max
* @Date: 2016-07-21
* @Description: 文件cipher信息
*/
typedef struct tagCipher
{
    /* 算法 */
    char szAlgorithm[FILE_ALGORITHM_LEN];

    /* 模式 */
    char szMode[FILE_ALGORITHM_MODE_LEN];

    /* 填充 */
    char szPadding[FILE_ALGORITHM_PADDING_LEN];

    /* key */
    unsigned char szKey[FILE_KEY_LEN];

    /* iv */
    unsigned char szIv[FILE_IV_LEN];
}CIPHER_S;

/**
* @Struct: THUMB_S
* @Author: guojianchuan/max
* @Date: 2016-07-21
* @Description: 文件thumb信息
*/
typedef struct tagThumb
{
    /* 缩略图标识 0:false 1:true */
    int iExistes;

    /* 缩略图大小 */
    int iSize;
}THUMB_S;

/**
* @Struct: META_S
* @Author: guojianchuan/max
* @Date: 2016-07-20
* @Description: 文件meta信息
*/
typedef struct tagMeta
{
    /* 文件id */
    char szId[FILE_ID_LEN];

    /* 文件所有者 */
    char szOwner[FILE_OWNER_LEN];

    /* 版本 */
    int iVersion;

    /* 加密块大小 */
    int iBlockSize;

    /* 在线/离线 0:离线 1:在线*/
    int iOffLine;

    /* 文件加密信息 */
    CIPHER_S stCipher;

    /* 文件缩略图信息 */
    THUMB_S stThumb;
}META_S;

#ifdef __cplusplus
}
#endif

#endif  /* _LOCKET_DEF_H_ */
